package com.spazioidro.objects;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.math.MathContext;

import android.util.Base64;
import android.util.Log;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import com.spazioidro.json.JSONException;
import com.spazioidro.json.JSONObject;
public class Articolo {
    private String cd_ar;
    private String descrizione;
    private String codicealternativo;
    //private String barcode;
    private double immediato;
    private double disponibile;
    private String cd_cf;
    private String desc_fornitore;
    private byte[] photo=null;
    private boolean xB_news;
    private double prezzo;
    private String sconto;
    public Articolo (){
        cd_ar = null;
        descrizione = null;
        codicealternativo = null;
        //barcode = art.getString("barcode");
        immediato = 0;
        disponibile = 0;
        cd_cf = null;
        desc_fornitore = null;
        photo = null;
        xB_news = false;
        prezzo = 0;
        sconto = null;
    }
    public Articolo (JSONObject art){
        try {
            cd_ar = art.getString("cd_ar");
            descrizione = art.getString("descrizione");
            if (art.has("codicealternativo"))
                codicealternativo = art.getString("codicealternativo");
            else
                codicealternativo = null;
            //barcode = art.getString("barcode");
            immediato = art.getDouble("immediato");
            disponibile = art.getDouble("disponibile");
            if (art.has("cd_cf"))
                cd_cf = art.getString("cd_cf");
            else
                cd_cf = null;
            if (art.has("desc_fornitore"))
                desc_fornitore = art.getString("desc_fornitore");
            else
                desc_fornitore = null;
            if (art.has("photo"))
                photo = Base64.decode(art.getString("photo"),Base64.DEFAULT);
            xB_news = art.getBoolean("xB_news");
            BigDecimal bd = new BigDecimal(art.getDouble("prezzo"));
            prezzo = bd.round(new MathContext(2)).doubleValue();
            sconto = art.getString("sconto");
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public Articolo (String cd_ar, String descrizione, String photo, double prezzo, String sconto ){
        this.cd_ar = cd_ar;
        this.descrizione = descrizione;
        if (photo!=null)
            this.photo = Base64.decode(photo,Base64.DEFAULT);
        BigDecimal bd = new BigDecimal(prezzo);
        this.prezzo = bd.round(new MathContext(2)).doubleValue();
        this.sconto = sconto;
    }
    public String getCd_ar (){ return this.cd_ar; }
    public String getDescrizione (){ return this.descrizione; }
    public String getCodicealternativo (){ return this.codicealternativo; }
    public double getImmediato (){ return this.immediato; }
    public double getDisponibile (){ return this.disponibile; }
    public String getCd_cf (){ return this.cd_cf; }
    public byte[] getPhotobyte (){ return this.photo; }
    public boolean getXB_news (){ return this.xB_news;}
    public String getDesc_Fornitore (){ return this.desc_fornitore; }
    public double getPrezzo (){ return prezzo; }
    public double getPrezzoScontato (){ return scontaPrezzo(this.prezzo,this.sconto);}
    public String getSconto (){ return sconto; }
    public Bitmap getPhoto (){
        if (!hasPhoto())
            return null;
        InputStream is = new ByteArrayInputStream(this.photo);
        Bitmap bmp = BitmapFactory.decodeStream(is);
        try {
            is.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return bmp;
    }
    public Bitmap getPhoto (int width, int height){
        InputStream is = null;
        try {
            if (!hasPhoto())
                return null;
            is = new ByteArrayInputStream(this.photo);
            Bitmap bmp = BitmapFactory.decodeStream(is);
            Log.i("bitmap",bmp.toString());
            bmp = Bitmap.createScaledBitmap(bmp, width, height,false ); 
        try {
            is.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return bmp;
        } catch (NullPointerException ex){
            Log.e("Articolo.getPhoto(int width,int height)","Impossibile disegnare la foto per "+this.cd_ar);
            this.photo = null;
            return null;
        }
    }
    //Metodo che segnala la presenza o meno di una foto per l'articolo
    public boolean hasPhoto (){
        return this.photo!=null;
    }
    /**
     * Restituisce il prezzo con applicato lo sconto passato come parametro
     *
     * @param  prezzo  il prezzo assoluto
     * @param  name sconto scritto nel formato [sc1]+[sc2]+...
     * @return      il prezzo scontato
     */
    public static double scontaPrezzo(double prezzo, String sconto){
        if (sconto.isEmpty())
               return prezzo;
        sconto.replace('+', 'P'); // il carattere + genera una Eccezione
        String [] splitted = sconto.split("P");
        int n = splitted.length;
        for (int i=0;i<n;i++){
            prezzo = prezzo-(prezzo/100*Integer.parseInt(splitted[i].trim()));
        }
        BigDecimal bigDecimal = new BigDecimal(prezzo);
        bigDecimal.round(new MathContext(2));
        prezzo = bigDecimal.doubleValue();
        return prezzo;
    }
}
